<!DOCTYPE html> <html lang=zh-CN><!--
 Page saved with SingleFile 
 url: https://yuerblog.cc/2020/03/28/sysctl-conf%E9%85%8D%E7%BD%AEconntrack%E5%BC%80%E6%9C%BA%E4%B8%8D%E7%94%9F%E6%95%88%E9%97%AE%E9%A2%98/ 
 saved date: Sat Mar 28 2020 14:15:53 GMT+0800 (China Standard Time)
--><meta charset=utf-8>
<meta name=viewport content="width=device-width">
<title>sysctl.conf配置conntrack开机不生效问题 | 鱼儿的博客</title>
<link rel=profile href=http://gmpg.org/xfn/11>
<link rel=pingback href=https://yuerblog.cc/xmlrpc.php>
<!--[if lt IE 9]>
<script src="https://yuerblog.cc/wp-content/themes/twentytwelve/js/html5.js" type="text/javascript"></script>
<![endif]-->
<meta name=description content="为了优化旁路由的网络性能，我在sysctl.conf中配置了一些关于conntrack的配置，结果发现重启后竟然不生效。 谷歌了一下，">
<meta property=og:locale content=zh_CN>
<meta property=og:type content=website>
<meta property=og:title content="sysctl.conf配置conntrack开机不生效问题 | 鱼儿的博客">
<meta property=og:description content="为了优化旁路由的网络性能，我在sysctl.conf中配置了一些关于conntrack的配置，结果发现重启后竟然不生效。 谷歌了一下，原来是nf_conntrack开机不会自动加载，而是当首次使用的时候懒加载，所以开机时压根还没有这个内核模块，所以无法生效参数。（地址：https://serverfault.com/questions/161530/">
<meta property=og:url content=https://yuerblog.cc/2020/03/28/sysctl-conf%e9%85%8d%e7%bd%aeconntrack%e5%bc%80%e6%9c%ba%e4%b8%8d%e7%94%9f%e6%95%88%e9%97%ae%e9%a2%98/>
<meta property=og:site_name content=鱼儿的博客>
<meta name=twitter:card content=summary_large_image>
<meta name=twitter:title content="sysctl.conf配置conntrack开机不生效问题 | 鱼儿的博客">
<meta name=twitter:description content="为了优化旁路由的网络性能，我在sysctl.conf中配置了一些关于conntrack的配置，结果发现重启后竟然不生效。 谷歌了一下，原来是nf_conntrack开机不会自动加载，而是当首次使用的时候懒加载，所以开机时压根还没有这个内核模块，所以无法生效参数。（地址：https://serverfault.com/questions/161530/">
<link rel=canonical href=https://yuerblog.cc/2020/03/28/sysctl-conf%e9%85%8d%e7%bd%aeconntrack%e5%bc%80%e6%9c%ba%e4%b8%8d%e7%94%9f%e6%95%88%e9%97%ae%e9%a2%98/>
<script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://yuerblog.cc/","name":"鱼儿的博客"}},{"@type":"ListItem","position":2,"item":{"@id":"https://yuerblog.cc/category/%e5%9f%ba%e7%a1%80%e8%bf%90%e7%bb%b4/","name":"基础运维"}},{"@type":"ListItem","position":3,"item":{"@id":"https://yuerblog.cc/2020/03/28/sysctl-conf%e9%85%8d%e7%bd%aeconntrack%e5%bc%80%e6%9c%ba%e4%b8%8d%e7%94%9f%e6%95%88%e9%97%ae%e9%a2%98/","name":"sysctl.conf配置conntrack开机不生效问题"}}]}</script>
<link rel=alternate type=application/rss+xml title="鱼儿的博客 » Feed" href=https://yuerblog.cc/feed/>
<link rel=alternate type=application/rss+xml title="鱼儿的博客 » 评论Feed" href=https://yuerblog.cc/comments/feed/>
<link rel=alternate type=application/rss+xml title="鱼儿的博客 » sysctl.conf配置conntrack开机不生效问题评论Feed" href=https://yuerblog.cc/2020/03/28/sysctl-conf%e9%85%8d%e7%bd%aeconntrack%e5%bc%80%e6%9c%ba%e4%b8%8d%e7%94%9f%e6%95%88%e9%97%ae%e9%a2%98/feed/>
<style>.crayon-table td{border-bottom:1px solid #AAA}.crayon-table-last td,.crayon-table tr:last-child td{border:0}.crayon-syntax{overflow:hidden!important;position:relative!important;text-align:left;box-sizing:border-box;direction:ltr!important;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-text-size-adjust:none}.crayon-syntax div{background:0;border:0;padding:0;margin:0;text-align:left}.crayon-syntax,.crayon-syntax .crayon-main,.crayon-syntax .crayon-toolbar,.crayon-syntax .crayon-code{width:100%}.crayon-syntax,.crayon-syntax .crayon-main,.crayon-syntax .crayon-table{padding:0;margin:0}.crayon-syntax .crayon-table{border:none!important;background:none!important;padding:0!important;margin-top:0!important;margin-right:0!important;margin-bottom:0!important;width:auto!important;border-spacing:0!important;border-collapse:collapse!important;table-layout:auto!important}.crayon-syntax .crayon-table td,.crayon-syntax .crayon-table tr{padding:0!important;border:none!important;background:0;vertical-align:top!important;margin:0!important}.crayon-syntax .crayon-num{padding:0 5px;margin:0}.crayon-syntax .crayon-toolbar{overflow:hidden}.crayon-syntax .crayon-toolbar span{padding:0 4px!important}.crayon-syntax .crayon-title{float:left}.crayon-main::-webkit-scrollbar,.crayon-plain::-webkit-scrollbar{height:6px;overflow:visible;width:6px;background:#EEE}.crayon-main::-webkit-scrollbar-thumb,.crayon-plain::-webkit-scrollbar-thumb{background-color:#CCC;background-clip:padding-box;border:1px solid #AAA;box-shadow:inset 0 0 2px #999;min-height:8px;padding:0;border-width:1px}.crayon-main::-webkit-scrollbar-button,.crayon-plain::-webkit-scrollbar-button{height:0;width:0;padding:0}.crayon-main::-webkit-scrollbar-track,.crayon-plain::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent;border-width:0 0 0 4px;border:1px solid #BBB;border-right:0;border-bottom:0}.crayon-main::-webkit-scrollbar-corner,.crayon-plain::-webkit-scrollbar-corner{background:#EEE}.crayon-main::-webkit-scrollbar-thumb:hover,.crayon-plain::-webkit-scrollbar-thumb:hover{background:#AAA;border:1px solid #777;box-shadow:inset 0 0 2px #777}.crayon-syntax .crayon-pre{color:#000;white-space:pre;margin:0;padding:0;overflow:visible;background:none!important;border:none!important}.crayon-syntax .crayon-line{padding:0 5px}.crayon-syntax{font-family:Monaco,'MonacoRegular','Courier New',monospace;font-weight:500}.crayon-syntax .crayon-toolbar *::selection,.crayon-syntax .crayon-nums *::selection{background:transparent}.crayon-table .crayon-nums-content{white-space:nowrap}.crayon-syntax .crayon-num,.crayon-syntax .crayon-pre .crayon-line,.crayon-syntax .crayon-toolbar *,.crayon-syntax .crayon-pre *{font-family:inherit;font-size:inherit!important;line-height:inherit!important;font-weight:inherit!important;height:inherit}.crayon-syntax .crayon-toolbar .crayon-tools{position:absolute;right:0}.crayon-syntax .crayon-plain-wrap{height:auto!important;padding:0!important;margin:0!important}.crayon-syntax .crayon-plain{width:100%;height:100%;position:absolute;padding:0 5px;margin:0;border:0;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-shadow:none;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;white-space:pre;word-wrap:normal;resize:none;color:#000;background:#FFF}.crayon-theme-github{margin-bottom:25px!important;border:1px solid #dedede!important;background-color:#f8f8ff!important;font-size:100%!important;line-height:130%!important}.crayon-theme-github .crayon-toolbar{border-bottom:1px solid #dedede!important;background-color:#eee!important}.crayon-theme-github .crayon-toolbar .crayon-title{font-size:80%!important;color:#666!important}.crayon-theme-github .crayon-table .crayon-nums{background-color:#eee!important}.crayon-theme-github .crayon-table .crayon-nums-content{padding-top:5px!important;padding-bottom:3px!important}.crayon-theme-github .crayon-table .crayon-num{min-width:1.2em!important;border-right:1px solid #dedede!important;text-align:right!important;color:#aaa!important}.crayon-theme-github .crayon-pre{padding-top:5px!important;padding-bottom:3px!important}.crayon-theme-github .crayon-pre .crayon-c{color:#999!important;font-style:italic!important}.crayon-theme-github .crayon-pre .crayon-v{color:#002d7a!important}.crayon-theme-github .crayon-pre .crayon-o{color:#006fe0!important}.crayon-theme-github .crayon-pre .crayon-sy{color:#333!important}.crayon-theme-github .crayon-pre .crayon-h{color:#006fe0!important}@font-face{font-family:'MonacoRegular';src:;font-weight:normal;font-style:normal}.crayon-font-monaco *{font-family:Monaco,'MonacoRegular','Courier New',monospace!important}@supports (-webkit-overflow-scrolling:touch){.wp-block-cover-image.has-parallax,.wp-block-cover.has-parallax{background-attachment:scroll}}@supports ((position:-webkit-sticky) or (position:sticky)){.wp-block-cover-image:after,.wp-block-cover:after{content:none}}@supports ((position:-webkit-sticky) or (position:sticky)){.blocks-gallery-grid .blocks-gallery-image figure,.blocks-gallery-grid .blocks-gallery-item figure,.wp-block-gallery .blocks-gallery-image figure,.wp-block-gallery .blocks-gallery-item figure{display:flex;align-items:flex-end;justify-content:flex-start}}@supports ((position:-webkit-sticky) or (position:sticky)){.blocks-gallery-grid .blocks-gallery-image img,.blocks-gallery-grid .blocks-gallery-item img,.wp-block-gallery .blocks-gallery-image img,.wp-block-gallery .blocks-gallery-item img{width:auto}}@supports ((position:-webkit-sticky) or (position:sticky)){.blocks-gallery-grid.is-cropped .blocks-gallery-image a,.blocks-gallery-grid.is-cropped .blocks-gallery-image img,.blocks-gallery-grid.is-cropped .blocks-gallery-item a,.blocks-gallery-grid.is-cropped .blocks-gallery-item img,.wp-block-gallery.is-cropped .blocks-gallery-image a,.wp-block-gallery.is-cropped .blocks-gallery-image img,.wp-block-gallery.is-cropped .blocks-gallery-item a,.wp-block-gallery.is-cropped .blocks-gallery-item img{height:100%;flex:1;-o-object-fit:cover;object-fit:cover}}@media (min-width:600px){@supports (-ms-ime-align:auto){.blocks-gallery-grid.columns-3 .blocks-gallery-image,.blocks-gallery-grid.columns-3 .blocks-gallery-item,.wp-block-gallery.columns-3 .blocks-gallery-image,.wp-block-gallery.columns-3 .blocks-gallery-item{width:calc((100% - 32px)/3 - 1px)}}@supports (-ms-ime-align:auto){.blocks-gallery-grid.columns-4 .blocks-gallery-image,.blocks-gallery-grid.columns-4 .blocks-gallery-item,.wp-block-gallery.columns-4 .blocks-gallery-image,.wp-block-gallery.columns-4 .blocks-gallery-item{width:calc((100% - 48px)/4 - 1px)}}@supports (-ms-ime-align:auto){.blocks-gallery-grid.columns-5 .blocks-gallery-image,.blocks-gallery-grid.columns-5 .blocks-gallery-item,.wp-block-gallery.columns-5 .blocks-gallery-image,.wp-block-gallery.columns-5 .blocks-gallery-item{width:calc((100% - 64px)/5 - 1px)}}@supports (-ms-ime-align:auto){.blocks-gallery-grid.columns-6 .blocks-gallery-image,.blocks-gallery-grid.columns-6 .blocks-gallery-item,.wp-block-gallery.columns-6 .blocks-gallery-image,.wp-block-gallery.columns-6 .blocks-gallery-item{width:calc((100% - 80px)/6 - 1px)}}@supports (-ms-ime-align:auto){.blocks-gallery-grid.columns-7 .blocks-gallery-image,.blocks-gallery-grid.columns-7 .blocks-gallery-item,.wp-block-gallery.columns-7 .blocks-gallery-image,.wp-block-gallery.columns-7 .blocks-gallery-item{width:calc((100% - 96px)/7 - 1px)}}@supports (-ms-ime-align:auto){.blocks-gallery-grid.columns-8 .blocks-gallery-image,.blocks-gallery-grid.columns-8 .blocks-gallery-item,.wp-block-gallery.columns-8 .blocks-gallery-image,.wp-block-gallery.columns-8 .blocks-gallery-item{width:calc((100% - 112px)/8 - 1px)}}}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.is-style-circle-mask img{-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-position:center;mask-position:center;border-radius:none}}@supports ((position:-webkit-sticky) or (position:sticky)){.wp-block-video [poster]{-o-object-fit:cover;object-fit:cover}}html,body,div,span,h1,h2,h3,p,a,img,small,ul,li,form,label,table,tbody,tr,td,article,aside,footer,header,hgroup,nav,time{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline}body{line-height:1}ul{list-style:none}td{font-weight:normal;text-align:left}h1,h2,h3{clear:both}html{overflow-y:scroll;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted}article,aside,footer,header,hgroup,nav{display:block}small{font-size:smaller}img{border:0;-ms-interpolation-mode:bicubic}.clear:after,.wrapper:after,.format-status .entry-header:after{clear:both}.clear:before,.clear:after,.wrapper:before,.wrapper:after,.format-status .entry-header:before,.format-status .entry-header:after{display:table;content:""}.widget-title{font-size:.785714286rem;line-height:2.181818182;font-weight:bold;text-transform:uppercase;color:#636363}input,textarea{border:1px solid #ccc;border-radius:3px;font-family:inherit;padding:.428571429rem}input{line-height:normal}textarea{overflow:auto;vertical-align:top}input[type="submit"]{padding:.428571429rem .714285714rem;font-size:.785714286rem;line-height:1.428571429;font-weight:normal;color:#7c7c7c;background-color:#e6e6e6;background-repeat:repeat-x;background-image:-moz-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-ms-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-webkit-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-o-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:linear-gradient(to bottom,#f4f4f4,#e6e6e6);border:1px solid #d2d2d2;border-radius:3px;box-shadow:0 1px 2px rgba(64,64,64,0.1)}input[type="submit"]{cursor:pointer}.menu-toggle:hover,.menu-toggle:focus,button:hover,input[type="submit"]:hover,input[type="button"]:hover,input[type="reset"]:hover,article.post-password-required input[type=submit]:hover{color:#5e5e5e;background-color:#ebebeb;background-repeat:repeat-x;background-image:-moz-linear-gradient(top,#f9f9f9,#ebebeb);background-image:-ms-linear-gradient(top,#f9f9f9,#ebebeb);background-image:-webkit-linear-gradient(top,#f9f9f9,#ebebeb);background-image:-o-linear-gradient(top,#f9f9f9,#ebebeb);background-image:linear-gradient(to bottom,#f9f9f9,#ebebeb)}.menu-toggle:active,.menu-toggle.toggled-on,button:active,input[type="submit"]:active,input[type="button"]:active,input[type="reset"]:active{color:#757575;background-color:#e1e1e1;background-repeat:repeat-x;background-image:-moz-linear-gradient(top,#ebebeb,#e1e1e1);background-image:-ms-linear-gradient(top,#ebebeb,#e1e1e1);background-image:-webkit-linear-gradient(top,#ebebeb,#e1e1e1);background-image:-o-linear-gradient(top,#ebebeb,#e1e1e1);background-image:linear-gradient(to bottom,#ebebeb,#e1e1e1);box-shadow:inset 0 0 8px 2px #c6c6c6,0 1px 0 0 #f4f4f4;border-color:transparent}.entry-content img,.widget img{max-width:100%}img[class*="wp-image-"]{height:auto}img.size-full{max-width:100%;height:auto}.aligncenter{display:block;margin-left:auto;margin-right:auto}.entry-content img,.widget img{border-radius:3px;box-shadow:0 1px 4px rgba(0,0,0,0.2)}.site-content nav{clear:both;line-height:2;overflow:hidden}.nav-previous{float:left;width:50%}.nav-next{float:right;text-align:right;width:50%}.nav-single+.comments-area{margin:3.428571429rem 0}html{font-size:87.5%}body{font-size:1rem;font-family:Helvetica,Arial,sans-serif;text-rendering:optimizeLegibility;color:#444}a{outline:0;color:#21759b}a:hover{color:#0f3647}.assistive-text,.site .screen-reader-text{position:absolute!important;clip:rect(1px,1px,1px,1px);overflow:hidden;height:1px;width:1px}.main-navigation .assistive-text:focus,.site .screen-reader-text:hover,.site .screen-reader-text:active,.site .screen-reader-text:focus{background:#fff;border:2px solid #333;border-radius:3px;clip:auto!important;color:#000;display:block;font-size:12px;height:auto;padding:12px;position:absolute;top:5px;left:5px;width:auto;z-index:100000}.site{padding:0 1.714285714rem;background-color:#fff}.site-content{margin:1.714285714rem 0 0}.widget-area{margin:1.714285714rem 0 0}.site-header{padding:1.714285714rem 0}.site-header h1,.site-header h2{text-align:center}.site-header h1 a{color:#515151;display:inline-block;text-decoration:none}.site-header h1 a:hover,.site-header h2 a:hover{color:#21759b}.site-header h1{font-size:1.714285714rem;line-height:1.285714286;margin-bottom:1rem}.site-header h2{font-weight:normal;font-size:.928571429rem;line-height:1.846153846;color:#757575}.main-navigation{margin-top:1.714285714rem;text-align:center}.main-navigation li{margin-top:1.714285714rem;font-size:.857142857rem;line-height:1.42857143}.main-navigation a{color:#5e5e5e}.main-navigation a:hover,.main-navigation a:focus{color:#21759b}.main-navigation ul.nav-menu{display:none}.widget-area .widget{-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto;margin-bottom:3.428571429rem;word-wrap:break-word}.widget-area .widget h3{margin-bottom:1.714285714rem}.widget-area .widget p,.widget-area .widget li,.widget-area .widget .textwidget{font-size:.928571429rem;line-height:1.846153846}.widget-area .widget p{margin-bottom:1.714285714rem}.widget-area .widget a{color:#757575}.widget-area .widget a:hover{color:#21759b}.widget-area .widget a:visited{color:#9f9f9f}.widget-area #s{width:53.66666666666%}footer[role="contentinfo"]{border-top:1px solid #ededed;clear:both;font-size:.857142857rem;line-height:2;max-width:68.571428571rem;margin-top:1.714285714rem;margin-left:auto;margin-right:auto;padding:1.714285714rem 0}footer[role="contentinfo"] a{color:#686868}footer[role="contentinfo"] a:hover{color:#21759b}.entry-meta{clear:both}.entry-header{margin-bottom:1.714285714rem}.entry-header .entry-title{font-size:1.428571429rem;line-height:1.2;font-weight:normal}.entry-header .comments-link{margin-top:1.714285714rem;font-size:.928571429rem;line-height:1.846153846;color:#757575}.comments-link a,.entry-meta a{color:#757575}.comments-link a:hover,.entry-meta a:hover{color:#21759b}.entry-content{line-height:1.714285714}.entry-content p{margin:0 0 1.714285714rem;line-height:1.714285714}.entry-content a:visited,.comment-content a:visited{color:#9f9f9f}img.aligncenter{clear:both;margin-top:.857142857rem;margin-bottom:.857142857rem}.entry-content table{border-bottom:1px solid #ededed;color:#757575;font-size:.857142857rem;line-height:2}.entry-content td{border-top:1px solid #ededed}.site-content article{border-bottom:4px double #ededed;margin-bottom:5.142857143rem;padding-bottom:1.714285714rem;word-wrap:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto}footer.entry-meta{margin-top:1.714285714rem;font-size:.928571429rem;line-height:1.846153846;color:#757575}#respond{margin-top:3.428571429rem}#respond h3#reply-title{font-size:1.142857143rem;line-height:1.5}#respond h3#reply-title #cancel-comment-reply-link{margin-left:.714285714rem;font-weight:normal;font-size:.857142857rem}#respond form{margin:1.714285714rem 0}#respond form p{margin:.785714286rem 0}#respond form label{display:block;line-height:1.714285714}#respond form input[type="text"],#respond form textarea{-moz-box-sizing:border-box;box-sizing:border-box;font-size:.857142857rem;line-height:1.714285714;padding:.714285714rem;width:100%}.widget_search label{display:block;font-size:.928571429rem;line-height:1.846153846}@-ms-viewport{width:device-width}@viewport{width:device-width}@media screen and (min-width:600px){.site{margin:0 auto;max-width:68.571428571rem;overflow:hidden}.site-content{float:left;width:65.104166667%}.widget-area{float:right;width:26.041666667%}.site-header h1,.site-header h2{text-align:left}.site-header h1{font-size:1.857142857rem;line-height:1.846153846;margin-bottom:0}.main-navigation ul.nav-menu{border-bottom:1px solid #ededed;border-top:1px solid #ededed;display:inline-block!important;text-align:left;width:100%}.main-navigation ul{margin:0;text-indent:0}.main-navigation li a,.main-navigation li{display:inline-block;text-decoration:none}.main-navigation li a{border-bottom:0;color:#6a6a6a;line-height:3.692307692;text-transform:uppercase;white-space:nowrap}.main-navigation li a:hover,.main-navigation li a:focus{color:#000}.main-navigation li{margin:0 2.857142857rem 0 0;position:relative}.entry-header .entry-title{font-size:1.571428571rem}#respond form input[type="text"]{width:46.333333333%}}@media screen and (min-width:960px){body{background-color:#e6e6e6}body .site{padding:0 2.857142857rem;margin-top:3.428571429rem;margin-bottom:3.428571429rem;box-shadow:0 2px 6px rgba(100,100,100,0.3)}}</style>
<!--[if lt IE 9]>
<link rel='stylesheet' id='twentytwelve-ie-css'  href='https://yuerblog.cc/wp-content/themes/twentytwelve/css/ie.css?ver=20121010' type='text/css' media='all' />
<![endif]-->
<link rel=https://api.w.org/ href=https://yuerblog.cc/wp-json/>
<link rel=EditURI type=application/rsd+xml title=RSD href=https://yuerblog.cc/xmlrpc.php?rsd>
<link rel=wlwmanifest type=application/wlwmanifest+xml href=https://yuerblog.cc/wp-includes/wlwmanifest.xml>
<link rel=alternate type=application/json+oembed href="https://yuerblog.cc/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fyuerblog.cc%2F2020%2F03%2F28%2Fsysctl-conf%25e9%2585%258d%25e7%25bd%25aeconntrack%25e5%25bc%2580%25e6%259c%25ba%25e4%25b8%258d%25e7%2594%259f%25e6%2595%2588%25e9%2597%25ae%25e9%25a2%2598%2F">
<link rel=alternate type=text/xml+oembed href="https://yuerblog.cc/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fyuerblog.cc%2F2020%2F03%2F28%2Fsysctl-conf%25e9%2585%258d%25e7%25bd%25aeconntrack%25e5%25bc%2580%25e6%259c%25ba%25e4%25b8%258d%25e7%2594%259f%25e6%2595%2588%25e9%2597%25ae%25e9%25a2%2598%2F&amp;format=xml">
<style id=custom-background-css>body.custom-background{background-image:url();background-position:center center;background-size:auto;background-repeat:repeat;background-attachment:fixed}</style>
<link type=image/x-icon rel="shortcut icon" href=data:><style>.sf-hidden{display:none!important}</style></head>
<body class="post-template-default single single-post postid-5926 single-format-standard custom-background wp-embed-responsive single-author">
<div id=page class="hfeed site">
 
 <div id=main class=wrapper>
 <div id=primary class=site-content>
 <div id=content role=main class>
 
 
 <article id=post-5926 class="post-5926 post type-post status-publish format-standard hentry category-104">
 <header class=entry-header>
 
 <h1 class=entry-title>sysctl.conf配置conntrack开机不生效问题</h1>
 <div class=comments-link>
 <a href=https://yuerblog.cc/2020/03/28/sysctl-conf%e9%85%8d%e7%bd%aeconntrack%e5%bc%80%e6%9c%ba%e4%b8%8d%e7%94%9f%e6%95%88%e9%97%ae%e9%a2%98/#respond><span class=leave-reply>发表评论</span></a> </div>
 </header>
 <div class=entry-content>
 <div class=yuerb-before-content_2 id=yuerb-588924174>
<ins class="adsbygoogle sf-hidden" style=display:block;text-align:center data-ad-layout=in-article data-ad-format=fluid data-ad-client=ca-pub-5878478910106641 data-ad-slot=5599238126></ins>
</div><p class>为了优化旁路由的网络性能，我在sysctl.conf中配置了一些关于conntrack的配置，结果发现重启后竟然不生效。<span id=more-5926></span></p>
<p class>谷歌了一下，原来是nf_conntrack开机不会自动加载，而是当首次使用的时候懒加载，所以开机时压根还没有这个内核模块，所以无法生效参数。（地址：<a href=https://serverfault.com/questions/161530/persisting-nf-conntrack-max-across-reboots>https://serverfault.com/questions/161530/persisting-nf-conntrack-max-across-reboots</a>）</p>
<p>解决方法就是在/etc/modules文件中，添加一行nf_conntrack即可：</p>
 <div id=crayon-5e7eea1b12714501006434 class="crayon-syntax crayon-theme-github crayon-font-monaco crayon-os-mac print-yes notranslate" data-settings=" minimize scroll-mouseover" style=margin-top:12px;margin-bottom:12px;font-size:12px!important;line-height:15px!important;height:auto>
 
 <div class=crayon-toolbar data-settings=" mouseover overlay hide delay" style=font-size:12px!important;height:18px!important;line-height:18px!important;margin-top:-19px;display:none;position:absolute;z-index:2><span class=crayon-title></span>
 <div class=crayon-tools style=font-size:12px!important;height:18px!important;line-height:18px!important></div></div>
 <div class="crayon-info sf-hidden" style=min-height:16.8px!important;line-height:16.8px!important></div>
 <div class=crayon-plain-wrap><textarea wrap=soft class="crayon-plain print-no" data-settings=dblclick readonly style=tab-size:4;font-size:12px!important;line-height:15px!important;z-index:0;opacity:0;overflow:hidden>(base) root@debian:/home/work# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
nf_conntrack</textarea></div>
 <div class=crayon-main style=position:relative;z-index:1;overflow:hidden>
 <table class=crayon-table>
 <tbody><tr class=crayon-row>
 <td class=crayon-nums data-settings=show>
 <div class=crayon-nums-content style=font-size:12px!important;line-height:15px!important><div class=crayon-num data-line=crayon-5e7eea1b12714501006434-1>1</div><div class="crayon-num crayon-striped-num" data-line=crayon-5e7eea1b12714501006434-2>2</div><div class=crayon-num data-line=crayon-5e7eea1b12714501006434-3>3</div><div class="crayon-num crayon-striped-num" data-line=crayon-5e7eea1b12714501006434-4>4</div><div class=crayon-num data-line=crayon-5e7eea1b12714501006434-5>5</div><div class="crayon-num crayon-striped-num" data-line=crayon-5e7eea1b12714501006434-6>6</div></div>
 </td>
 <td class=crayon-code><div class=crayon-pre style=font-size:12px!important;line-height:15px!important;-moz-tab-size:4;-o-tab-size:4;-webkit-tab-size:4;tab-size:4><div class=crayon-line id=crayon-5e7eea1b12714501006434-1><span class=crayon-sy>(</span><span class=crayon-v>base</span><span class=crayon-sy>)</span><span class=crayon-h> </span><span class=crayon-v>root</span><span class=crayon-sy>@</span><span class=crayon-v>debian</span><span class=crayon-o>:</span><span class=crayon-o>/</span><span class=crayon-v>home</span><span class=crayon-o>/</span><span class=crayon-v>work</span><span class=crayon-c># cat /etc/modules</span></div><div class="crayon-line crayon-striped-line" id=crayon-5e7eea1b12714501006434-2><span class=crayon-c># /etc/modules: kernel modules to load at boot time.</span></div><div class=crayon-line id=crayon-5e7eea1b12714501006434-3><span class=crayon-c>#</span></div><div class="crayon-line crayon-striped-line" id=crayon-5e7eea1b12714501006434-4><span class=crayon-c># This file contains the names of kernel modules that should be loaded</span></div><div class=crayon-line id=crayon-5e7eea1b12714501006434-5><span class=crayon-c># at boot time, one per line. Lines beginning with "#" are ignored.</span></div><div class="crayon-line crayon-striped-line" id=crayon-5e7eea1b12714501006434-6><span class=crayon-v>nf_conntrack</span></div></div></td>
 </tr>
 </table>
 </div>
 </div>

 </div>
 
 
 </article>
 <nav class=nav-single>
 <h3 class=assistive-text>文章导航</h3>
 <span class=nav-previous></span>
 <span class=nav-next></span>
 </nav>
 
<div id=comments class=comments-area>
 
 
 <div id=respond class=comment-respond>
 	</div>
 
</div>
 
 </div>
 </div>
 
 </div>
 
</div>
<script data-template-shadow-root>(() => { document.currentScript.remove(); const processNode = node => { node.querySelectorAll("template[shadowmode]").forEach(element=>{ if (!element.parentElement.shadowRoot) { const shadowRoot = element.parentElement.attachShadow({mode:element.getAttribute("shadowmode"),delegatesFocus:Boolean(element.getAttribute("delegatesfocus"))}); shadowRoot.innerHTML = element.innerHTML; element.remove(); processNode(shadowRoot); } }) }; const FORBIDDEN_TAG_NAMES = ["a","area","audio","base","br","col","command","embed","hr","img","iframe","input","keygen","link","meta","param","source","track","video","wbr"]; const NOTE_TAGNAME = "single-file-note"; const NOTE_CLASS = "note"; const NOTE_ANCHORED_CLASS = "note-anchored"; const NOTE_SELECTED_CLASS = "note-selected"; const NOTE_MOVING_CLASS = "note-moving"; const NOTE_MASK_MOVING_CLASS = "note-mask-moving"; const MASK_CLASS = "single-file-mask"; const HIGHLIGHT_CLASS = "single-file-highlight"; const NOTES_WEB_STYLESHEET = ".note { all: initial; display: flex; flex-direction: column; height: 150px; width: 150px; position: absolute; top: 10px; left: 10px; border: 1px solid rgb(191, 191, 191); z-index: 2147483646; box-shadow: 2px 2px 5px rgba(33, 33, 33, .7); min-height: 100px; min-width: 100px; } .note-selected { z-index: 2147483647; } .note-hidden { display: none; } .note-collapsed { min-height: 30px; max-height: 30px; overflow: hidden; } .note textarea { all: initial; white-space: pre; font-family: Arial, Helvetica, sans-serif; font-size: 14px; padding: 3px; height: 100%; border: 1px solid transparent; resize: none; } .note textarea:focus { border: 1px dotted rgb(160, 160, 160); } .note header { all: initial; min-height: 30px; cursor: grab; user-select: none; } .note .note-remove { all: initial; position: absolute; right: 0px; top: 2px; padding: 5px; opacity: .5; cursor: pointer; user-select: none; } .note .note-anchor { all: initial; position: absolute; left: 0px; top: 2px; padding: 5px; opacity: .25; cursor: pointer; } .note .note-resize { all: initial; position: absolute; bottom: -5px; right: -5px; height: 15px; width: 15px; cursor: nwse-resize; user-select: none; } .note .note-remove:hover { opacity: 1; } .note .note-anchor:hover { opacity: .5; } .note-anchored .note-anchor { opacity: .5; } .note-anchored .note-anchor:hover { opacity: 1; } .note-moving { opacity: .5; } .note-moving * { cursor: grabbing; } .note-yellow header { background-color: #f5f545; } .note-yellow textarea { background-color: #ffff7c; } .note-pink header { background-color: #ffa59f; } .note-pink textarea { background-color: #ffbbb6; } .note-blue header { background-color: #84c8ff; } .note-blue textarea { background-color: #95d0ff; } .note-green header { background-color: #93ef8d; } .note-green textarea { background-color: #9cff95; }"; const MASK_WEB_STYLESHEET = ".note-mask { all: initial; position: fixed; z-index: 2147483645; pointer-events: none; } .note-mask-moving { background-color: rgba(236, 234, 234, 0.5); } .page-mask { all: initial; position: fixed; top: 0; left: 0; width: 0; height: 0; z-index: 2147483646; } .page-mask-active { width: 100vw; height: 100vh; }"; const NOTE_HEADER_HEIGHT = 25; const PAGE_MASK_ACTIVE_CLASS = "page-mask-active"; const REMOVED_CONTENT_CLASS = "single-file-removed"; const reflowNotes = function reflowNotes() { document.querySelectorAll(NOTE_TAGNAME).forEach(containerElement => { const noteElement = containerElement.shadowRoot.querySelector("." + NOTE_CLASS); const noteBoundingRect = noteElement.getBoundingClientRect(); const anchorElement = getAnchorElement(containerElement); const anchorBoundingRect = anchorElement.getBoundingClientRect(); const maxX = anchorBoundingRect.x + Math.max(0, anchorBoundingRect.width - noteBoundingRect.width); const minX = anchorBoundingRect.x; const maxY = anchorBoundingRect.y + Math.max(0, anchorBoundingRect.height - NOTE_HEADER_HEIGHT); const minY = anchorBoundingRect.y; let left = parseInt(noteElement.style.getPropertyValue("left")); let top = parseInt(noteElement.style.getPropertyValue("top")); if (noteBoundingRect.x > maxX) { left -= noteBoundingRect.x - maxX; } if (noteBoundingRect.x < minX) { left += minX - noteBoundingRect.x; } if (noteBoundingRect.y > maxY) { top -= noteBoundingRect.y - maxY; } if (noteBoundingRect.y < minY) { top += minY - noteBoundingRect.y; } noteElement.style.setProperty("position", "absolute"); noteElement.style.setProperty("left", left + "px"); noteElement.style.setProperty("top", top + "px"); }); }; const addNoteRef = function addNoteRef(anchorElement, noteId) { const noteRefs = getNoteRefs(anchorElement); noteRefs.push(noteId); setNoteRefs(anchorElement, noteRefs); }; const deleteNoteRef = function deleteNoteRef(containerElement, noteId) { const anchorElement = getAnchorElement(containerElement); const noteRefs = getNoteRefs(anchorElement).filter(noteRefs => noteRefs != noteId); if (noteRefs.length) { setNoteRefs(anchorElement, noteRefs); } else { delete anchorElement.dataset.singleFileNoteRefs; } }; const getNoteRefs = function getNoteRefs(anchorElement) { return JSON.parse("[" + (anchorElement.dataset.singleFileNoteRefs || "") + "]"); }; const setNoteRefs = function setNoteRefs(anchorElement, noteRefs) { anchorElement.dataset.singleFileNoteRefs = noteRefs.toString(); }; const getAnchorElement = function getAnchorElement(containerElement) { return document.querySelector("[data-single-file-note-refs^=" + JSON.stringify(containerElement.dataset.noteId) + "], [data-single-file-note-refs$=" + JSON.stringify(containerElement.dataset.noteId) + "], [data-single-file-note-refs*=" + JSON.stringify("," + containerElement.dataset.noteId + ",") + "]"); }; const getMaskElement = function getMaskElement(className, containerClassName) { let maskElement = document.documentElement.querySelector("." + className); if (!maskElement) { maskElement = document.createElement("div"); const maskContainerElement = document.createElement("div"); if (containerClassName) { maskContainerElement.classList.add(containerClassName); } maskContainerElement.classList.add(MASK_CLASS); const firstNote = document.querySelector(NOTE_TAGNAME); if (firstNote && firstNote.parentElement == document.documentElement) { document.documentElement.insertBefore(maskContainerElement, firstNote); } else { document.documentElement.appendChild(maskContainerElement); } maskElement.classList.add(className); const maskShadow = maskContainerElement.attachShadow({ mode: "open" }); maskShadow.appendChild(getStyleElement(MASK_WEB_STYLESHEET)); maskShadow.appendChild(maskElement); return maskElement; } }; const getStyleElement = function getStyleElement(stylesheet) { const linkElement = document.createElement("style"); linkElement.textContent = stylesheet; return linkElement; }; const attachNoteListeners = function attachNoteListeners(containerElement, editable = false) { const SELECT_PX_THRESHOLD = 4; const COLLAPSING_NOTE_DELAY = 750; const noteShadow = containerElement.shadowRoot; const noteElement = noteShadow.childNodes[1]; const headerElement = noteShadow.querySelector("header"); const mainElement = noteShadow.querySelector("textarea"); const noteId = containerElement.dataset.noteId; const resizeElement = noteShadow.querySelector(".note-resize"); const anchorIconElement = noteShadow.querySelector(".note-anchor"); const removeNoteElement = noteShadow.querySelector(".note-remove"); mainElement.readOnly = !editable; if (!editable) { anchorIconElement.style.setProperty("display", "none", "important"); } else { anchorIconElement.style.removeProperty("display"); } headerElement.ontouchstart = headerElement.onmousedown = event => { if (event.target == headerElement) { collapseNoteTimeout = setTimeout(() => noteElement.classList.toggle("note-collapsed"), COLLAPSING_NOTE_DELAY); event.preventDefault(); const position = getPosition(event); const clientX = position.clientX; const clientY = position.clientY; const boundingRect = noteElement.getBoundingClientRect(); const deltaX = clientX - boundingRect.left; const deltaY = clientY - boundingRect.top; maskPageElement.classList.add(PAGE_MASK_ACTIVE_CLASS); document.documentElement.style.setProperty("user-select", "none", "important"); anchorElement = getAnchorElement(containerElement); displayMaskNote(); selectNote(noteElement); moveNote(event, deltaX, deltaY); movingNoteMode = { event, deltaX, deltaY }; document.documentElement.ontouchmove = document.documentElement.onmousemove = event => { clearTimeout(collapseNoteTimeout); if (!movingNoteMode) { movingNoteMode = { deltaX, deltaY }; } movingNoteMode.event = event; moveNote(event, deltaX, deltaY); }; } }; resizeElement.ontouchstart = resizeElement.onmousedown = event => { event.preventDefault(); resizingNoteMode = true; selectNote(noteElement); maskPageElement.classList.add(PAGE_MASK_ACTIVE_CLASS); document.documentElement.style.setProperty("user-select", "none", "important"); document.documentElement.ontouchmove = document.documentElement.onmousemove = event => { event.preventDefault(); const { clientX, clientY } = getPosition(event); const boundingRectNote = noteElement.getBoundingClientRect(); noteElement.style.width = clientX - boundingRectNote.left + "px"; noteElement.style.height = clientY - boundingRectNote.top + "px"; }; }; anchorIconElement.ontouchend = anchorIconElement.onclick = event => { event.preventDefault(); noteElement.classList.toggle(NOTE_ANCHORED_CLASS); if (!noteElement.classList.contains(NOTE_ANCHORED_CLASS)) { deleteNoteRef(containerElement, noteId); addNoteRef(document.documentElement, noteId); } }; removeNoteElement.ontouchend = removeNoteElement.onclick = event => { event.preventDefault(); deleteNoteRef(containerElement, noteId); containerElement.remove(); }; noteElement.onmousedown = () => { selectNote(noteElement); }; function moveNote(event, deltaX, deltaY) { event.preventDefault(); const { clientX, clientY } = getPosition(event); noteElement.classList.add(NOTE_MOVING_CLASS); if (editable) { if (noteElement.classList.contains(NOTE_ANCHORED_CLASS)) { deleteNoteRef(containerElement, noteId); anchorElement = getTarget(clientX, clientY) || document.documentElement; addNoteRef(anchorElement, noteId); } else { anchorElement = document.documentElement; } } document.documentElement.insertBefore(containerElement, maskPageElement.getRootNode().host); noteElement.style.setProperty("left", (clientX - deltaX) + "px"); noteElement.style.setProperty("top", (clientY - deltaY) + "px"); noteElement.style.setProperty("position", "fixed"); displayMaskNote(); } function displayMaskNote() { if (anchorElement == document.documentElement || anchorElement == document.documentElement) { maskNoteElement.classList.remove(NOTE_MASK_MOVING_CLASS); } else { const boundingRectAnchor = anchorElement.getBoundingClientRect(); maskNoteElement.classList.add(NOTE_MASK_MOVING_CLASS); maskNoteElement.style.setProperty("top", boundingRectAnchor.y + "px"); maskNoteElement.style.setProperty("left", boundingRectAnchor.x + "px"); maskNoteElement.style.setProperty("width", boundingRectAnchor.width + "px"); maskNoteElement.style.setProperty("height", boundingRectAnchor.height + "px"); } } function selectNote(noteElement) { if (selectedNote) { selectedNote.classList.remove(NOTE_SELECTED_CLASS); } noteElement.classList.add(NOTE_SELECTED_CLASS); selectedNote = noteElement; } function getTarget(clientX, clientY) { const targets = Array.from(document.elementsFromPoint(clientX, clientY)).filter(element => element.tagName.toLowerCase() != NOTE_TAGNAME && !element.classList.contains(MASK_CLASS)); if (!targets.includes(document.documentElement)) { targets.push(document.documentElement); } let newTarget, target = targets[0], boundingRect = target.getBoundingClientRect(); newTarget = determineTargetElement("floor", target, clientX - boundingRect.left, getMatchedParents(target, "left")); if (newTarget == target) { newTarget = determineTargetElement("ceil", target, boundingRect.left + boundingRect.width - clientX, getMatchedParents(target, "right")); } if (newTarget == target) { newTarget = determineTargetElement("floor", target, clientY - boundingRect.top, getMatchedParents(target, "top")); } if (newTarget == target) { newTarget = determineTargetElement("ceil", target, boundingRect.top + boundingRect.height - clientY, getMatchedParents(target, "bottom")); } target = newTarget; while (boundingRect = target && target.getBoundingClientRect(), boundingRect && boundingRect.width <= SELECT_PX_THRESHOLD && boundingRect.height <= SELECT_PX_THRESHOLD) { target = target.parentElement; } return target; } function getMatchedParents(target, property) { let element = target, matchedParent, parents = []; do { const boundingRect = element.getBoundingClientRect(); if (element.parentElement && !element.parentElement.tagName.toLowerCase() != NOTE_TAGNAME && !element.classList.contains(MASK_CLASS)) { const parentBoundingRect = element.parentElement.getBoundingClientRect(); matchedParent = Math.abs(parentBoundingRect[property] - boundingRect[property]) <= SELECT_PX_THRESHOLD; if (matchedParent) { if (element.parentElement.clientWidth > SELECT_PX_THRESHOLD && element.parentElement.clientHeight > SELECT_PX_THRESHOLD && ((element.parentElement.clientWidth - element.clientWidth > SELECT_PX_THRESHOLD) || (element.parentElement.clientHeight - element.clientHeight > SELECT_PX_THRESHOLD))) { parents.push(element.parentElement); } element = element.parentElement; } } else { matchedParent = false; } } while (matchedParent && element); return parents; } function determineTargetElement(roundingMethod, target, widthDistance, parents) { if (Math[roundingMethod](widthDistance / SELECT_PX_THRESHOLD) <= parents.length) { target = parents[parents.length - Math[roundingMethod](widthDistance / SELECT_PX_THRESHOLD) - 1]; } return target; } }; const anchorNote = function anchorNote(event, noteElement, deltaX, deltaY) { event.preventDefault(); const { clientX, clientY } = getPosition(event); document.documentElement.style.removeProperty("user-select"); noteElement.classList.remove(NOTE_MOVING_CLASS); maskNoteElement.classList.remove(NOTE_MASK_MOVING_CLASS); maskPageElement.classList.remove(PAGE_MASK_ACTIVE_CLASS); const headerElement = noteElement.querySelector("header"); headerElement.ontouchmove = document.documentElement.onmousemove = null; let currentElement = anchorElement; let positionedElement; while (currentElement.parentElement && !positionedElement) { if (!FORBIDDEN_TAG_NAMES.includes(currentElement.tagName.toLowerCase())) { const currentElementStyle = getComputedStyle(currentElement); if (currentElementStyle.position != "static") { positionedElement = currentElement; } } currentElement = currentElement.parentElement; } if (!positionedElement) { positionedElement = document.documentElement; } const containerElement = noteElement.getRootNode().host; if (positionedElement == document.documentElement) { const firstMaskElement = document.querySelector("." + MASK_CLASS); document.documentElement.insertBefore(containerElement, firstMaskElement); } else { positionedElement.appendChild(containerElement); } const boundingRectPositionedElement = positionedElement.getBoundingClientRect(); const stylePositionedElement = window.getComputedStyle(positionedElement); const borderX = parseInt(stylePositionedElement.getPropertyValue("border-left-width")); const borderY = parseInt(stylePositionedElement.getPropertyValue("border-top-width")); noteElement.style.setProperty("position", "absolute"); noteElement.style.setProperty("left", (clientX - boundingRectPositionedElement.x - deltaX - borderX) + "px"); noteElement.style.setProperty("top", (clientY - boundingRectPositionedElement.y - deltaY - borderY) + "px"); }; const getPosition = function getPosition(event) { if (event.touches && event.touches.length) { const touch = event.touches[0]; return touch; } else { return event; } }; const onMouseUp = function onMouseUp(event) { if (highlightSelectionMode) { highlightSelection(); } if (removeHighlightMode) { let element = event.target, done; while (element && !done) { if (element.classList.contains(HIGHLIGHT_CLASS)) { document.querySelectorAll("." + HIGHLIGHT_CLASS + "[data-singlefile-highlight-id=" + JSON.stringify(element.dataset.singlefileHighlightId) + "]").forEach(highlightedElement => { resetHighlightedElement(highlightedElement); }); done = true; } element = element.parentElement; } } if (resizingNoteMode) { resizingNoteMode = false; document.documentElement.style.removeProperty("user-select"); maskPageElement.classList.remove(PAGE_MASK_ACTIVE_CLASS); document.documentElement.ontouchmove = document.documentElement.onmousemove = null; } if (movingNoteMode) { anchorNote(movingNoteMode.event || event, selectedNote, movingNoteMode.deltaX, movingNoteMode.deltaY); movingNoteMode = null; document.documentElement.ontouchmove = document.documentElement.onmousemove = null; } if (collapseNoteTimeout) { clearTimeout(collapseNoteTimeout); collapseNoteTimeout = null; } if (cuttingMode) { let element = event.target; if (document.documentElement != element && element.tagName.toLowerCase() != NOTE_TAGNAME) { element.classList.add(REMOVED_CONTENT_CLASS); removedElements.push(element); } } }; const maskNoteElement = getMaskElement("note-mask"); const maskPageElement = getMaskElement("page-mask", "single-file-page-mask"); let selectedNote, highlightSelectionMode, removeHighlightMode, resizingNoteMode, movingNoteMode, collapseNoteTimeout, cuttingMode; window.onresize = reflowNotes; document.documentElement.onmouseup = document.documentElement.ontouchend = onMouseUp; window.addEventListener("DOMContentLoaded", () => { processNode(document); reflowNotes(); document.querySelectorAll("single-file-note").forEach(noteElement => attachNoteListeners(noteElement)); }); })()</script><style>.single-file-highlight-yellow { background-color: #ffff7c !important; color: black !important; } span.single-file-highlight-yellow { display: inline !important; } .single-file-highlight-pink { background-color: #ffbbb6 !important; color: black !important; } span.single-file-highlight-pink { display: inline !important; } .single-file-highlight-blue { background-color: #95d0ff !important; color: black !important; } span.single-file-highlight-blue { display: inline !important; } .single-file-highlight-green { background-color: #93ef8d !important; color: black !important; } span.single-file-highlight-green { display: inline !important; } .single-file-highlight-hidden { background-color: inherit !important; color: inherit !important; } .single-file-mask { all: initial; display: contents !important; } .single-file-mask.single-file-page-mask { opacity: .99 !important; } single-file-note { all: initial !important; display: contents !important; } .single-file-hover { outline: 1px solid red !important; } .single-file-removed { display: none !important; float: none !important; position: static !important; visibility: collapse !important; }</style>